﻿using System;
using System.IO;
using Styx;
using Styx.Helpers;

namespace TuanHA_Combat_Routine
{
    public class THSettings : Settings
    {
        public static readonly THSettings Instance = new THSettings();

        #region DataSource

        //public readonly DataSet DCleanseASAP = new DataSet("CleanseASAP");

        //public string PathCastSpells = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
        //                                            string.Format(
        //                                                @"Routines/TuanHAPaladinSpecialEdition/THListCastSpells.xml"));

        //public string PathChannelSpells = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
        //                                               string.Format(
        //                                                   @"Routines/TuanHAPaladinSpecialEdition/THListChannelSpells.xml"));

        //public string PathCleanseASAP = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
        //                                             string.Format(
        //                                                 @"Routines/TuanHAPaladinSpecialEdition/THListCleanseASAP.xml"));

        //public string PathCleanseDoNot = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
        //                                              string.Format(
        //                                                  @"Routines/TuanHAPaladinSpecialEdition/THListCleanseDoNot.xml"));

        //public string PathHealDoNot = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
        //                                           string.Format(
        //                                               @"Routines/TuanHAPaladinSpecialEdition/THListHealDoNot.xml"));


        public bool UpdateStatus;

        public THSettings()
            : base(
                Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                             string.Format(
                                 @"Routines/TuanHAPaladinSpecialEdition/TuanHA-Paladin-Settings-20130731-{0}.xml",
                                 StyxWoW.Me.Name)))
        {
            //DCleanseASAP.ReadXml(PathCleanseASAP);
        }

        #endregion

        #region General

        [Setting, DefaultValue(true)]
        public bool ArdentDefender { get; set; }

        [Setting, DefaultValue(20)]
        public int ArdentDefenderHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool AvengersShieldLowestThreat { get; set; }

        [Setting, DefaultValue(true)]
        public bool AvengersShield { get; set; }

        [Setting, DefaultValue(true)]
        public bool AvengingWrath { get; set; }

        [Setting, DefaultValue(true)]
        public bool AvengingWrathHoly { get; set; }

        [Setting, DefaultValue(3)]
        public int AvengingWrathHolyNumber { get; set; }

        [Setting, DefaultValue(60)]
        public int AvengingWrathHolyHP { get; set; }

        [Setting, DefaultValue(false)]
        public bool Pause { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoBuff { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoMove { get; set; }

        [Setting, DefaultValue(false)]
        public bool AutoRez { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoRighteousFury { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoRacial { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoTarget { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoTaunt { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoFace { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoAttack { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoUseFood { get; set; }

        [Setting, DefaultValue(50)]
        public int AutoUseFoodHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoCancelBubble { get; set; }

        [Setting, DefaultValue(70)]
        public int AutoCancelBubbleHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool BattleStandard { get; set; }

        [Setting, DefaultValue(50)] //S
        public int BattleStandardHP { get; set; }

        [Setting, DefaultValue(19)] //S
        public int Backward { get; set; }

        [Setting, DefaultValue(true)]
        public bool BeaconofLight { get; set; }

        [Setting, DefaultValue(true)]
        public bool BlindingLightInterrupt { get; set; }

        [Setting, DefaultValue(2000)]
        public int BlindingLightInterruptMs { get; set; }

        [Setting, DefaultValue(5)]
        public int BurstDelay { get; set; }

        [Setting, DefaultValue(42)]
        public int BurstKey { get; set; }

        [Setting, DefaultValue(60)]
        public int BurstHP { get; set; }

        [Setting, DefaultValue(false)]
        public bool Burst { get; set; }

        [Setting, DefaultValue(true)]
        public bool CleanseASAP { get; set; }

        [Setting, DefaultValue(true)]
        public bool CleanseDebuff { get; set; }

        [Setting, DefaultValue(1)]
        public int CleanseDebuffNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool CrusaderStrikeHoly { get; set; }

        [Setting, DefaultValue(true)]
        public bool Consecration { get; set; }

        [Setting, DefaultValue(false)]
        public bool BlindingLightLow { get; set; }

        [Setting, DefaultValue(50)]
        public int BlindingLightLowHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool DevotionAura { get; set; }

        [Setting, DefaultValue(50)]
        public int DevotionAuraHP { get; set; }

        [Setting, DefaultValue(false)]
        public bool DevotionAuraSilence { get; set; }

        [Setting, DefaultValue(false)]
        public bool DevotionAuraSilenceAny { get; set; }

        [Setting, DefaultValue(false)]
        public bool DevotionAuraSilenceHealer { get; set; }

        [Setting, DefaultValue(false)]
        public bool DevotionAuraSilenceCaster { get; set; }

        [Setting, DefaultValue(50)]
        public int DevotionAuraSilenceHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool DivinePlea { get; set; }

        [Setting, DefaultValue(80)]
        public int DivinePleaHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool DivineProtection { get; set; }

        [Setting, DefaultValue(80)]
        public int DivineProtectionHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool DivineShield { get; set; }

        [Setting, DefaultValue(30)]
        public int DivineShieldHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool DivineStorm { get; set; }

        [Setting, DefaultValue(2)]
        public int DivineStormUnit { get; set; }

        [Setting, DefaultValue(true)]
        public bool ExecutionSentenceFriend { get; set; }

        [Setting, DefaultValue(50)]
        public int ExecutionSentenceFriendHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool ExecutionSentenceEnemy { get; set; }

        [Setting, DefaultValue(50)]
        public int ExecutionSentenceEnemyHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool GuardianofAncientKingsProt { get; set; }

        [Setting, DefaultValue(50)]
        public int GuardianofAncientKingsProtHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HolyWrath { get; set; }

        [Setting, DefaultValue(true)]
        public bool HammerofJusticeInterrupt { get; set; }

        [Setting, DefaultValue(2000)]
        public int HammerofJusticeInterruptMs { get; set; }

        [Setting, DefaultValue(true)]
        public bool HammerofJusticeLow { get; set; }

        [Setting, DefaultValue(50)]
        public int HammerofJusticeLowHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HammerofJusticeEnemyLow { get; set; }

        [Setting, DefaultValue(25)]
        public int HammerofJusticeEnemyLowHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HammerofJusticeEnemyUsingCD { get; set; }

        [Setting, DefaultValue(false)]
        public bool HandofProtectionHPRemoveCC { get; set; }

        [Setting, DefaultValue(true)]
        public bool HealthStone { get; set; }

        [Setting, DefaultValue(40)]
        public int HealthStoneHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofProtection { get; set; }

        [Setting, DefaultValue(40)]
        public int HandofProtectionHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofPurity { get; set; }

        [Setting, DefaultValue(50)]
        public int HandofPurityHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofPurityDebuff { get; set; }

        [Setting, DefaultValue(5)]
        public int HandofPurityDebuffNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofSacrifice { get; set; }

        [Setting, DefaultValue(70)]
        public int HandofSacrificeHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool LayonHands { get; set; }

        [Setting, DefaultValue(25)]
        public int LayonHandsHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool LightsHammerEnemy { get; set; }

        [Setting, DefaultValue(3)]
        public int LightsHammerEnemyNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool LightsHammerFriend { get; set; }

        [Setting, DefaultValue(3)]
        public int LightsHammerFriendNumber { get; set; }

        [Setting, DefaultValue(80)]
        public int LightsHammerFriendHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofFreedomMyself { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofFreedomMelee { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofFreedomCaster { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofFreedomHealer { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofSacCCRemoveMelee { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofSacCCRemoveCaster { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofSacCCRemoveHealer { get; set; }

        [Setting, DefaultValue(true)]
        public bool HammeroftheRighteousRet { get; set; }

        [Setting, DefaultValue(4)]
        public int HammeroftheRighteousRetNumber { get; set; }

        [Setting, DefaultValue(false)]
        public bool HammeroftheRighteousRetWeakenedBlows { get; set; }

        [Setting, DefaultValue(true)]
        public bool HammeroftheRighteousProt { get; set; }

        [Setting, DefaultValue(4)]
        public int HammeroftheRighteousProtUnit { get; set; }

        [Setting, DefaultValue(true)]
        public bool HolyPrismFriend { get; set; }

        [Setting, DefaultValue(80)]
        public int HolyPrismFriendHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HolyPrismEnemy { get; set; }

        [Setting, DefaultValue(80)]
        public int HolyPrismEnemyHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HolyPrismEnemyHeal { get; set; }

        [Setting, DefaultValue(3)]
        public int HolyPrismEnemyHealNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool HolyPrismFriendDPS { get; set; }

        [Setting, DefaultValue(3)]
        public int HolyPrismFriendDPSNumber { get; set; }

        [Setting, DefaultValue(80)]
        public int HolyPrismEnemyHealHP { get; set; }

        //Hotkey1
        [Setting, DefaultValue(0)]
        public int Hotkey1Target { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey1Mod { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey1Key { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey1Spell { get; set; }

        //Hotkey2
        [Setting, DefaultValue(0)]
        public int Hotkey2Target { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey2Mod { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey2Key { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey2Spell { get; set; }

        //Hotkey3
        [Setting, DefaultValue(0)]
        public int Hotkey3Target { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey3Mod { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey3Key { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey3Spell { get; set; }

        //Hotkey4
        [Setting, DefaultValue(0)]
        public int Hotkey4Target { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey4Mod { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey4Key { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey4Spell { get; set; }

        //Hotkey5
        [Setting, DefaultValue(0)]
        public int Hotkey5Target { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey5Mod { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey5Key { get; set; }

        [Setting, DefaultValue(0)]
        public int Hotkey5Spell { get; set; }

        [Setting, DefaultValue(true)]
        public bool InterruptAll { get; set; }

        [Setting, DefaultValue(false)]
        public bool InterruptTarget { get; set; }

        [Setting, DefaultValue(false)]
        public bool InterruptFocus { get; set; }

        [Setting, DefaultValue(true)]
        public bool PreferKings { get; set; }

        [Setting, DefaultValue(false)]
        public bool PreferMight { get; set; }

        [Setting, DefaultValue(16)] //P
        public int PauseKey { get; set; }

        [Setting, DefaultValue(17)] //Q
        public int StrafleLeft { get; set; }

        [Setting, DefaultValue(23)] //W
        public int Forward { get; set; }

        [Setting, DefaultValue(95)]
        public int DoNotHealAbove { get; set; }

        [Setting, DefaultValue(true)]
        public bool Denounce { get; set; }

        [Setting, DefaultValue(true)]
        public bool DivineLight { get; set; }

        [Setting, DefaultValue(70)]
        public int DivineLightHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool DivineFavor { get; set; }

        [Setting, DefaultValue(3)]
        public int DivineFavorNumber { get; set; }

        [Setting, DefaultValue(60)]
        public int DivineFavorHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool Emancipate { get; set; }

        [Setting, DefaultValue(true)]
        public bool Exorcism { get; set; }

        [Setting, DefaultValue(false)]
        public bool EternalFlameBlanket { get; set; }

        [Setting, DefaultValue(1)]
        public int EternalFlameBlanketHolyPower { get; set; }

        [Setting, DefaultValue(true)]
        public bool FlashofLightHoly { get; set; }

        [Setting, DefaultValue(50)]
        public int FlashofLightHolyHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool FlashofLightMeProt { get; set; }

        [Setting, DefaultValue(40)]
        public int FlashofLightMeProtHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool FlashofLightMeRet { get; set; }

        [Setting, DefaultValue(70)]
        public int FlashofLightMeRetHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool FlashofLightFriendRet { get; set; }

        [Setting, DefaultValue(40)]
        public int FlashofLightFriendRetHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool GuardianofAncientKingsHoly { get; set; }

        [Setting, DefaultValue(3)]
        public int GuardianofAncientKingsHolyNumber { get; set; }

        [Setting, DefaultValue(50)]
        public int GuardianofAncientKingsHolyHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool GuardianofAncientKings { get; set; }

        [Setting, DefaultValue(true)]
        public bool HammerofWrathHoly { get; set; }

        [Setting, DefaultValue(true)]
        public bool HandofSalvHighThreat { get; set; }

        [Setting, DefaultValue(90)]
        public int HandofSalvHighThreatPercent { get; set; }

        [Setting, DefaultValue(0)]
        public int HealBalancing { get; set; }

        [Setting, DefaultValue(true)]
        public bool HolyAvengerHoly { get; set; }

        [Setting, DefaultValue(3)]
        public int HolyAvengerHolyNumber { get; set; }

        [Setting, DefaultValue(50)]
        public int HolyAvengerHolyHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HolyLight { get; set; }

        [Setting, DefaultValue(95)]
        public int HolyLightHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HolyRadiance { get; set; }

        [Setting, DefaultValue(3)]
        public int HolyRadianceNumber { get; set; }

        [Setting, DefaultValue(80)]
        public int HolyRadianceHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HolyShockOffensive { get; set; }

        [Setting, DefaultValue(true)]
        public bool Inquisition { get; set; }

        [Setting, DefaultValue(3)]
        public int InquisitionHolyPower { get; set; }

        [Setting, DefaultValue(true)]
        public bool Judgment { get; set; }

        [Setting, DefaultValue(true)]
        public bool JudgmentHolyAttack { get; set; }

        [Setting, DefaultValue(true)]
        public bool JudgmentBurdenofGuilt { get; set; }

        [Setting, DefaultValue(true)]
        public bool JudgmentLongArmoftheLaw { get; set; }

        [Setting, DefaultValue(true)]
        public bool LagTolerance { get; set; }

        [Setting, DefaultValue(true)]
        public bool LightofDawn { get; set; }

        [Setting, DefaultValue(3)]
        public int LightofDawnNumber { get; set; }

        [Setting, DefaultValue(90)]
        public int LightofDawnHP { get; set; }

        [Setting, DefaultValue(70)]
        public int ManaforDPS { get; set; }

        [Setting, DefaultValue(75)]
        public int PriorityHeal { get; set; }

        [Setting, DefaultValue(false)]
        public bool OnlyHealMe { get; set; }

        [Setting, DefaultValue(false)]
        public bool OnlyHealTarget { get; set; }

        [Setting, DefaultValue(false)]
        public bool OnlyHealFocus { get; set; }

        [Setting, DefaultValue(true)]
        public bool PauseKeyUse { get; set; }

        [Setting, DefaultValue(0)]
        public int ProfBuff { get; set; }

        [Setting, DefaultValue(60)]
        public int ProfBuffHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool Rebuke { get; set; }

        [Setting, DefaultValue(1000)]
        public int RebukeMs { get; set; }

        [Setting, DefaultValue(true)]
        public bool RepentanceCC { get; set; }

        [Setting, DefaultValue(true)]
        public bool SealofRighteousnessRet { get; set; }

        [Setting, DefaultValue(8)]
        public int SealofRighteousnessRetNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool SealofRighteousnessProt { get; set; }

        [Setting, DefaultValue(8)]
        public int SealofRighteousnessProtNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool ShieldofRighterous { get; set; }

        [Setting, DefaultValue(3)]
        public int ShieldofRighterousHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool SacredShieldProt { get; set; }

        [Setting, DefaultValue(true)]
        public bool SacredShieldProtMe { get; set; }

        [Setting, DefaultValue(true)]
        public bool SacredShieldRetMe { get; set; }

        [Setting, DefaultValue(true)]
        public bool SacredShieldRet { get; set; }

        [Setting, DefaultValue(true)]
        public bool SelflessHealer { get; set; }

        [Setting, DefaultValue(80)]
        public int SelflessHealerHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool SpeedofLight { get; set; }

        [Setting, DefaultValue(6)]
        public int SpeedofLightDistance { get; set; }

        [Setting, DefaultValue(5)] //E
        public int StrafleRight { get; set; }

        [Setting, DefaultValue(1)] //A
        public int TurnRight { get; set; }

        [Setting, DefaultValue(4)] //D
        public int TurnLeft { get; set; }

        [Setting, DefaultValue(true)]
        public bool TemplarsVerdict { get; set; }

        [Setting, DefaultValue(0)]
        public int Trinket1 { get; set; }

        [Setting, DefaultValue(60)]
        public int Trinket1HP { get; set; }

        [Setting, DefaultValue(0)]
        public int Trinket2 { get; set; }

        [Setting, DefaultValue(60)]
        public int Trinket2HP { get; set; }

        [Setting, DefaultValue(true)]
        public bool TurnEvilASAP { get; set; }

        [Setting, DefaultValue(true)]
        public bool TurnEvil { get; set; }

        [Setting, DefaultValue(40)]
        public int UrgentHeal { get; set; }

        [Setting, DefaultValue(true)]
        public bool WordofGloryHoly { get; set; }

        [Setting, DefaultValue(50)]
        public int WordofGloryHolyHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool WordofGloryMeRet { get; set; }

        [Setting, DefaultValue(70)]
        public int WordofGloryMeRetHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool WordofGloryFriendRet { get; set; }

        [Setting, DefaultValue(40)]
        public int WordofGloryFriendRetHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool WordofGloryMeProt { get; set; }

        [Setting, DefaultValue(3)]
        public int WordofGloryMeProtHolyPower { get; set; }

        [Setting, DefaultValue(40)]
        public int WordofGloryMeProtHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool WordofGloryFriendProt { get; set; }

        [Setting, DefaultValue(3)]
        public int WordofGloryFriendProtHolyPower { get; set; }

        [Setting, DefaultValue(40)]
        public int WordofGloryFriendProtHP { get; set; }

        #endregion

        #region Group Healing

        [Setting, DefaultValue(true)]
        public bool Group1 { get; set; }

        [Setting, DefaultValue(true)]
        public bool Group2 { get; set; }

        [Setting, DefaultValue(true)]
        public bool Group3 { get; set; }

        [Setting, DefaultValue(true)]
        public bool Group4 { get; set; }

        [Setting, DefaultValue(true)]
        public bool Group5 { get; set; }

        [Setting, DefaultValue(true)]
        public bool Group6 { get; set; }

        [Setting, DefaultValue(true)]
        public bool Group7 { get; set; }

        [Setting, DefaultValue(true)]
        public bool Group8 { get; set; }

        #endregion
    }
}